#include<bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=2e5+5;
int n,k;
int d[N],a[N];
int head[N],to[N<<1],nxt[N<<1],tot,fa[N],dep[N];
inline void add(int u,int v){nxt[++tot]=head[u],to[tot]=v,head[u]=tot;d[v]++;}
void pdfs(int u,int pf){
	fa[u]=pf;dep[u]=dep[pf]+1;
	for(int i=head[u];i;i=nxt[i]){
		int v=to[i];
		if(v==pf)continue;
		pdfs(v,u);
	}
}
inline bool ch(int u,int v){
	int s=0,cnt=1;
	while(u^v){
		cnt++;
		if(dep[u]<dep[v])swap(u,v);
		if(cnt>k)return 1;
		s+=a[u];u=fa[u];
	}
	s+=a[u];
	if(cnt==k&&s!=1)return 0;
	return 1;
}
inline bool solve(){
	for(int i=1;i<=n;i++){
		for(int j=i+1;j<=n;j++){
			if(!ch(i,j))return 0;
		}
	}
	return 1;
}
int ans;
void dfs(int t){
	if(t>n){
		if(solve())ans++;
		return ;
	}
	a[t]=1;
	dfs(t+1);
	a[t]=0;
	dfs(t+1);
}
int main(){
	freopen("life.in","r",stdin);
	freopen("life.out","w",stdout);
	ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>n>>k;
	int u,v;
	for(int i=1;i<n;i++){
		cin>>u>>v;
		add(u,v),add(v,u);
	}
	int p1=0,p2=0;
	for(int i=1;i<=n;i++){
		if(d[i]==1)p1++;
		if(d[i]==2)p2++;
	}
	if(p1+p2==n&&p1==2){
		cout<<"YES\n";
		cout<<k<<"\n";
		return 0;
	}
	pdfs(1,0);dfs(1);
	if(ans){
		cout<<"YES\n";
		cout<<ans<<"\n";
	}
	else cout<<"NO\n0\n";
	return 0;
}

